package graph;

/**
 *
 * @author Alykam e Guilherme
 */

import graphCORE.VertexInterface;
import java.util.Iterator;
import java.util.ArrayList;

public class Vertex implements VertexInterface {
    
    /*
     * Classe que instancia vértice com id e lista de vértices adjacentes
     * 
     */
    
    
    private int id;  
    //id do vértice, usado para identificar o vértice    
    private ArrayList<Integer> vertexAdjList=new ArrayList<Integer>();
    // lista de vértices adjacentes
    
    
    /*
     * método construtor
     */
    public Vertex(int id) {
        this.id=id;
        this.vertexAdjList=new ArrayList<Integer>();
    }

    /*
     * método que retorna o id do vértice
     */
    @Override
    public int getId() {
        return this.id;
    }
    
    /*
     * método que retorna o grau do vertice
     */
    @Override
    public int getDegree() {
        return this.vertexAdjList.size();
    }
    
    /*
     * método para adicionar aresta
     * recebe id da aresta
     */
    public void addEdge (int v){
        this.vertexAdjList.add(v);
    }
    
    /*
     * método para remover aresta a partir do indice na lista.
     */
    public void removeEdge (int i){
        this.vertexAdjList.remove(i);
    }
    
    /*
     * método que verifica se um vértice é adjacente ao objeto vértice
     * instanciado
     * recebe o id do vértice
     */
    @Override
    public boolean isAdjacent(int vj) {
        for (Iterator<Integer> it = vertexAdjList.iterator(); it.hasNext();) {
            Integer vertex = it.next();
            if (vertex==vj)
                return true;
        }
        
        return false;
    }
    
    /*
     * método que retorna a lista de vértices adjacentes 
     */
    public ArrayList<Integer> getVertexAdjList(){
        return this.vertexAdjList;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("Vertex [id=");
        builder.append(this.id);
        builder.append(", ");
        builder.append("adjacent=(");
        for (Iterator<Integer> it = vertexAdjList.iterator(); it.hasNext();) {
            Integer vertex = it.next();
            builder.append(vertex); 
            if(it.hasNext())
                builder.append(", ");
        }
        builder.append(")]");
        
        return builder.toString();
    }
    
    
}
